'''
第二章 Python数据结构：集合对象（字典、Set、元组、列表）
'''

# 用字典来存放“键值对”类型数据，本质是用基于哈希表的方式来保存数据，所以查找速度很快，查找时间复杂度O(1)
# PS: 字典就是JS中的plain object
onePersonInfo = {'name': 'Mike', 'age': 3}
print(onePersonInfo)
# change element
# onePersonInfo.name = 'haha' 错误写法，JS才这么写
onePersonInfo['name'] = 'Haha'
print(onePersonInfo)
# delete element
del onePersonInfo['age']
print(onePersonInfo)
# 访问element
print(onePersonInfo.get('name'))
print(onePersonInfo.get('age')) # 被删除了，所以返回None

# in操作访问对象属性
if 'age' not in onePersonInfo:
  onePersonInfo['age'] = 22
print(onePersonInfo)

# for遍历对象的属性和值
for i,v in onePersonInfo.items():
  print(i, v)

# 字段的值的类型可以不同、可以存储很复杂的数据
# 用列表方式定义Tom和Mike两个账户
accountInfoList = [
  {'name': 'Tom', 'balance': 100, 'stockList': [12424, 322413]},
  {'name': 'Mike', 'balance': 200, 'stockList': [12524, 352413]}
]
# 通过for循环，依次输出列表中的元素
for item in accountInfoList:
  print(item['name'],item['balance'],item['stockList']) # print中后面带逗号表示不换行

# 用字典方式定义Tom和Mike两个账户
accountInfoDict = {
  'Tom': {'balance': 100, 'stockList': [12424, 322413]},
  'Mike': {'balance': 200, 'stockList': [12524, 352413]}  
}
# 指定输出Tom的账户信息
print(accountInfoDict['Tom'])
# 更新或插入Tom账户信息
accountInfoDict.update({'Tom': {'balance': 300, 'stockList': [12, 23]}})
print(accountInfoDict['Tom'])
# 更新或插入Peter账户
accountInfoDict.update({'Peter': {'balance': 400, 'stockList': [111, 222]}})
print(accountInfoDict['Peter'])

# 双层循环打印数据
for name,account in accountInfoDict.items():
  print('name is %s:'%name), # 不换行
  for key,value in account.items():
    print(key, value)
  print()

# 虽然字典可以存储结构复杂的对象，但推荐用同一种格式（数据结构）存储多个数据
# 好处：提前约定好格式，更方便操作字典中的数据